﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DAL
{
    public partial    class NotaSalida
    {
        public int Add(dbGestionDataContext _db,
                        string numDocumento,
                        DateTime fecha,
                        int	idMotivo,
                        string documentoRef,
                        int	idDocumentoTipo,
                        int	idObra,
                        string	empleadoSolicita,
                        int	idAutorizado,
                        int? idUnidTrabajo,
                        int	idAlmacen,
                        string observacion,
                        int idUsuarioCre,
                        int? idAlmacenDestino)
        {

            
                    this.numDocumento=numDocumento;
                    this.fecha=fecha;
                    this.idMotivo=idMotivo;
                    this.documentoRef=documentoRef;
                    this.idDocumentoTipo=idDocumentoTipo;
                    this.idObra=idObra;
                    this.empleadoSolicita=empleadoSolicita;
                    this.idAutorizado=idAutorizado;
                    this.idUnidTrabajo=idUnidTrabajo;
                    this.idAlmacen=idAlmacen;
                    this.observacion=observacion;
                    this.usuarioCre=idUsuarioCre;
                    this.fechaCre=DateTime.Now;
                    this.usuarioMod=idUsuarioCre;
                    this.fechaMod=DateTime.Now;
                    this.idAlmacenDest = idAlmacenDestino;

                    _db.NotaSalidas.InsertOnSubmit(this);
                    _db.SubmitChanges();
                    return this.idInternal;
        
        }

        public int getidAnterior(dbGestionDataContext _db, 
            int idinternal, 
            int idAlmacen)
        {
            int intAnterior = 0;


            var id = from i in _db.NotaSalidas
                     where i.idInternal < idinternal && i.idAlmacen == idAlmacen
                     group i by i.idAlmacen into g
                     select new
                     {
                         idAnterior = g.Max(p => p.idInternal)
                     };

            if (id.Count() > 0)
            {
                intAnterior = id.First().idAnterior;

            }
            else
            {
                throw new Exception("No existe Registros");
            }


            return intAnterior;

        }
        public int getidSiguiente(dbGestionDataContext _db, 
            int idinternal, 
            int idAlmacen)
        {
            int intSiguiente = 0;

            //revisar la sentencia generada
            var id = from i in _db.NotaSalidas
                     where i.idInternal > idinternal && i.idAlmacen == idAlmacen
                     group i by i.idAlmacen into g
                     select new
                     {
                         idSiguiente = g.Min(p => p.idInternal)
                     };


            if (id.Count() > 0)
            {
                intSiguiente = id.First().idSiguiente;

            }
            else
            {
                throw new Exception("No existe Registros");
            }

            return intSiguiente;
        }
        public string getCorrelativo(dbGestionDataContext _db, 
            int idAlmacen)
        {
            string numDocumento = "";
            var q = from a in _db.NotaSalidas
                    where a.idAlmacen == idAlmacen
                    group a by a.idAlmacen into g
                    select new
                    {
                        idObra = g.Key,
                        numDocumento = g.Max(p => p.numDocumento)
                    };
            if (q.Count() == 0)
            {
                numDocumento = "00000001";
            }
            else
            {
                int numActual = int.Parse(q.First().numDocumento);
                numActual++;
                if (numActual < 10)
                    numDocumento = "0000000" + numActual.ToString();
                else if (numActual < 100)
                    numDocumento = "000000" + numActual.ToString();
                else if (numActual < 1000)
                    numDocumento = "00000" + numActual.ToString();
                else if (numActual < 10000)
                    numDocumento = "0000" + numActual.ToString();
                else if (numActual < 100000)
                    numDocumento = "000" + numActual.ToString();
                else if (numActual < 1000000)
                    numDocumento = "00" + numActual.ToString();
                else if (numActual < 1000000)
                    numDocumento = "0" + numActual.ToString();
                else if (numActual < 10000000)
                    numDocumento = numActual.ToString();
                else if (numActual > 9999999)
                {
                    throw new Exception("Limite  de Correlativo Comparativo");
                }


            }
            return numDocumento;

        }


    }




}
